import { log } from 'console';
import * as vscode from 'vscode';

/**
 * 根据输入的名称初始化一个模块
 * @returns 
 */
export async function initModule(selectedDir: string) {
    const fs = require('fs');
    const path = require('path');
    
    // 获取当前选中的目录
    log('selectedDir:',selectedDir);

    if (!selectedDir) {
        vscode.window.showErrorMessage('请在资源管理器右键一个目录后操作.');
        return;
    }



    // 创建模块目录
    const moduleName = await vscode.window.showInputBox({ prompt: '输入要创建的模块名称:' });
    if (!moduleName) return; // 用户取消输入


    // 目录结构
    const moduleStructure = {
        [`${moduleName}.html`]: getModuleNameHtmlContent(moduleName), // HTML文件名与模块名相同
        [`${moduleName}.js`]: getModuleNameJsContent(moduleName),     // JS文件名也与模块名相同
        "router": {},
        "modulePart": {}
    };

    const modulePath = path.join(selectedDir, moduleName);
    if (!fs.existsSync(modulePath)) {
        fs.mkdirSync(modulePath);
        
        // 递归创建目录和文件
        for (const [name, content] of Object.entries(moduleStructure)) {
            const fullPath = path.join(modulePath, name);
            if (typeof content === 'object') { // 是目录
                fs.mkdirSync(fullPath);

                // 特别处理route目录，创建index.js和routes.js
                if (name === 'router') {
                    const routeFiles: { [key: string]: string } = {
                        'index.js': getRouteIndexJsContent(),
                        'routes.js': getRouteRoutesJsContent()
                    };
                    for (const fileName of Object.keys(routeFiles)) {
                        fs.writeFileSync(path.join(fullPath, fileName), routeFiles[fileName]);
                    }
                }

            } else { // 是文件
                fs.writeFileSync(fullPath, content);
            }
        }
        
        vscode.window.showInformationMessage(`模块 "${moduleName}" 创建成功.`);
    } else {
        vscode.window.showWarningMessage(`文件夹 "${moduleName}" 早已存在.`);
    }
}

function getModuleNameHtmlContent(moduleName:string){

    return `
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>${moduleName}</title>
  </head>
  <body>
    <div id="app">
      <router-view></router-view>
    </div>
  </body>
</html>
    `;
}

function getModuleNameJsContent(moduleName:string){

    return `
import { Vue, store, taMixins, checkLogin } from 'common/js/public-ant.js' // 引入公共文件
import router from './router/index' // 引入 该模块的路由模块

// 自己引入各种插件

// 判断登录状态然后确认是否渲染页面
checkLogin(() => {
    new Vue({
    mixins: [taMixins],
    router,
    store
    }).$mount('#app')
})
    `;
}
function getRouteIndexJsContent(){

    return `
import Vue from 'vue' // 引入vue
import VueRouter from 'vue-router' // 引入vue路由支持
import routes from './routes' // 引入路由列表配置

// 使用注册使用路由
Vue.use(VueRouter)

// 定义该模块的路由
const router = new VueRouter({
    routes: routes
})

// 导出该模块路由
export default router
    `;
}

function getRouteRoutesJsContent(){

    return `
import routesContainer from '@/common/components/routesContainer'

// 模块part 声明导入

const innerRoutes = []

// 导入路由声明
export default [
    {
    path: '/',
    component: routesContainer,
    children: innerRoutes.map((item) => ({
        ...item
    }))
    }
]
    
    `;
}